package com.ibm.demoBankJSF.beans;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

import com.ibm.demoBankJSF.operaciones.OperTransferencia;
import com.ibm.demoBankJSF.utils.MessageFactory;
import com.ibm.demoBankJSF.utils.Utiles;

public class TransferenciaBean {

	String cuentaDestinoPropia;
	String cuentaDestinoNoPropia;
	String importe;
	String comentario;
	String cuentaOrigen;
	
	public static final String ERROR_IMPORTE="errorImporte";
	public static final String ERROR_CUENTA_DESTINO_INCORRECTA="errorCuentaDestinoIncorrecta";
	public static final String ERROR_COINCIDENCIA_CUENTAS="errorCoincidenciaCuentas";
	public static final String ERROR_CUENTA_ORIGEN_INCORRECTA="errorCuentaOrigenIncorrecta";
	public String getComentario() {
		return comentario;
	}
	public void setComentario(String comentario) {
		this.comentario = comentario;
	}
	public String getCuentaDestinoNoPropia() {
		return cuentaDestinoNoPropia;
	}
	public void setCuentaDestinoNoPropia(String cuentaDestinoNoPropia) {
		this.cuentaDestinoNoPropia = cuentaDestinoNoPropia;
	}
	public String getCuentaDestinoPropia() {
		return cuentaDestinoPropia;
	}
	public void setCuentaDestinoPropia(String cuentaDestinoPropia) {
		this.cuentaDestinoPropia = cuentaDestinoPropia;
	}
	public String getImporte() {
		return importe;
	}
	public void setImporte(String importe) {
		this.importe = importe;
	}
	
	public String cancelarTransferencia(){
		return "error";
	}
	
	public String validarTransferencia() {
		FacesContext facesContext = FacesContext.getCurrentInstance();
		double importeDouble=0;
		String msg = null;
		String estado = "ok";
		/*
		 * A efectos de la demo la operacion a realizar es la misma tanto para una cuenta propia como ajena.
		 */
		if(cuentaDestinoNoPropia!=null && cuentaDestinoNoPropia.length()==20){
			cuentaDestinoPropia=cuentaDestinoNoPropia;
		}
		if(!Utiles.comprobarCuenta(cuentaOrigen)){
			msg = ERROR_CUENTA_ORIGEN_INCORRECTA;
			estado = "error";
		}else if(!Utiles.comprobarCuenta(cuentaDestinoPropia)){
			msg = ERROR_CUENTA_DESTINO_INCORRECTA;
			estado = "error";
		}else if(cuentaOrigen.equalsIgnoreCase(cuentaDestinoPropia)){
			msg = ERROR_COINCIDENCIA_CUENTAS;
			estado = "error";
		}
		try{
			importeDouble=Utiles.convertirADouble(importe);
		}catch (NumberFormatException e){
			msg = ERROR_IMPORTE;
			estado = "error";
		}
		if(msg==null && importeDouble==0){
			msg = ERROR_IMPORTE;
			estado = "error";
		}
		if (msg !=null){
			FacesMessage facesMessage = MessageFactory.getMessage(msg);
			facesContext.addMessage("transferencia", facesMessage);
		}
		if(comentario==null) comentario="";
		if(estado.equals("ok")){
			estado = OperTransferencia.confirmarDatosTransferencia(facesContext,cuentaOrigen,cuentaDestinoPropia, importeDouble, comentario);
		}

		return estado;
	}
	
	public String realizarTransferencia() {
		FacesContext facesContext = FacesContext.getCurrentInstance();
		double importeDouble=Utiles.convertirADouble(importe);
		String estado="error";
		estado = OperTransferencia.transferencia(facesContext,cuentaOrigen,cuentaDestinoPropia, importeDouble, comentario);
		return estado;
	}
	
	public String getCuentaOrigen() {
		return cuentaOrigen;
	}
	
	public void setCuentaOrigen(String cuentaOrigen) {
		this.cuentaOrigen = cuentaOrigen;
	}

}
